package org.leo.dm.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URLDecoder;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * Created on 2016年2月18日
 * <p>
 * Description File工具类
 * <p>
 * Copyright neusoft (c) 2015 .
 * 
 * @author xiao_h
 *
 */
public class FileUtil {
	static Logger log = LoggerFactory.getLogger(FileUtil.class);

	/**
	 * 
	 * Created on 2016年2月18日 .
	 * 
	 * @author xiao_h
	 * @param pathname
	 * @return 文件读取成String
	 */
	public static String readToString(String pathname) {
		File file = new File(pathname);
		Long filelength = file.length(); // 获取文件长度
		byte[] filecontent = new byte[filelength.intValue()];
		FileInputStream in = null;
		try {
			in = new FileInputStream(file);
			in.read(filecontent);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return new String(filecontent);// 返回文件内容,默认编码
	}

	/**
	 * 
	 * Created on 2016年1月12日 .
	 * 
	 * @author xiao_h
	 * @param content
	 *            保存字符串到文件中
	 */
	public File saveAsFileWriter(String content, String fileName) {
		File file = null;
		FileWriter fwriter = null;
		try {
			file = new File(getResourcePath() + fileName);
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
			fwriter = new FileWriter(file);
			fwriter.write(content);
			fwriter.flush();
		} catch (IOException ex) {
			ex.printStackTrace();
		} finally {
			try {
				fwriter.close();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}
		return file;
	}

	private String getResourcePath() {
		return getPath() + File.separator + "xmlcache" + File.separator;
	}

	private String getPath() {
		String basePath = null;
		try {
			basePath = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
			basePath = URLDecoder.decode(basePath, "utf-8");
			// log.info("basePaht1:" + basePath);
			if (basePath.endsWith(".jar")) {
				basePath = basePath.substring(0, basePath.lastIndexOf(File.separator) + 1);
			}
			File f = new File(basePath);
			basePath = f.getAbsolutePath(); // 得到windows下的正确路径
			// log.info("basePaht2:" + basePath);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return basePath;
	}

	/**
	 * 删除单个文件
	 * 
	 * @param fileName
	 *            要删除的文件的文件名
	 * @return 单个文件删除成功返回true，否则返回false
	 */
	public static boolean deleteFile(String fileName) {
		File file = new File(fileName);
		// 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
		if (file.exists() && file.isFile()) {
			if (file.delete()) {
				log.info("删除单个文件" + fileName + "成功！");
				return true;
			} else {
				log.info("删除单个文件" + fileName + "失败！");
				return false;
			}
		} else {
			log.info("删除单个文件失败：" + fileName + "不存在！");
			return false;
		}
	}
}
